package com.mall.b2c.service;

import java.math.BigDecimal;

import com.mall.b2c.domain.order.RefundDomain;
import com.mall.common.service.BaseService;

/**
 * Service接口 - 退款单
 */
public interface RefundService extends BaseService<RefundDomain, Long>  {
	
	/**
	 * 获取退款信息
	 * @param refundNo 退款编号
	 * @param memberId 会员id
	 * @return
	 */
	public RefundDomain getRefund(String refundNo, Long memberId);

	/**
	 * 申请退款
	 * @param itemId 订单项id
	 * @param quantity 退款数量
	 * @param isChange 是否换货
	 * @param consignee 收款人
	 * @param areaId 地区
	 * @param address 地址
	 * @param contact 联系方式
	 * @param remark 备注
	 * @param memberId 会员id
	 * @return
	 */
	public String applyRefund(Long itemId, Integer quantity, Boolean isChange, String consignee, 
			Long areaId, String address, String contact, String remark, Long memberId);

	/**
	 * 申请退款(后台)
	 * @param itemIds 订单项id
	 * @param quantitys 退款数量
	 * @param isChange 是否换货
	 * @param consignee 收款人
	 * @param areaId 地区
	 * @param address 地址
	 * @param contact 联系方式
	 * @param remark 备注
	 * @param orderId 会员id
	 * @param operator 操作员
	 * @return
	 */
	public void applyRefundForAdmin(Long[] itemIds, Integer[] quantitys, Boolean isChange, String consignee,
			Long areaId, String address, String contact, String remark, Long orderId, String operator);
	
	/**
	 * 确认申请
	 * @param id 退款单id
	 * @param amount 退款金额
	 * @param operator 操作员
	 */
	public void confirm(Long id, BigDecimal amount, String operator);
	
	/**
	 * 拒绝
	 * @param ids 退款单id
	 */
	public void refuse(Long[] ids, String operator);
	
	/**
	 * 验证
	 * @param id 退款单id
	 * @param amount 金额
	 */
	public void approve(Long id, BigDecimal amount, String operator);
	
	/**
	 * 取消退款
	 * @param refundNo 退款编号
	 * @param memberId 会员id
	 */
	public void cancel(String refundNo, Long memberId);

	/**
	 * 换货确认收货
	 * @param refundNo 退款编号
	 * @param memberId 会员id
	 */
	public void receive(String refundNo, Long memberId);

	/**
	 * 完成退款(后台)
	 * @param id 退款id
	 * @param operator 操作员
	 */
	public void finish(Long id, String operator);
}